﻿using EvertonApp.Transporte;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace EvertonApp.Data
{
    class TestOfertasRepository : IRepository<Oferta>
    {
        private static List<Oferta> _ofertas = new List<Oferta> {
                                                    new Oferta(Guid.NewGuid(), TestComerciosRepository._comercios.First(), "Oferta1", "Oferton", DateTime.Now, DateTime.Now), 
                                                    new Oferta(Guid.NewGuid(), TestComerciosRepository._comercios.First(), "Oferta2", "Descuento", DateTime.Now, DateTime.Now), 
                                                    new Oferta(Guid.NewGuid(), TestComerciosRepository._comercios.First(), "Oferta3", "Regalo", DateTime.Now, DateTime.Now)};


        #region Implementation of IRepository<Oferta>

        public Oferta Insert(Oferta entity)
        {
            _ofertas.Add(entity);
            entity.IdOferta = Guid.NewGuid();
            return entity;
        }

        public bool Delete(Oferta entity)
        {
            return _ofertas.Remove(entity);
        }

        public bool Update(Guid id, Oferta entity)
        {
            Oferta ofer = _ofertas.FirstOrDefault(o => o.IdOferta == id);
            if (ofer != null)
            {
                ofer.IdOferta = entity.IdOferta;
                ofer.Titulo = entity.Titulo;
                ofer.Descripcion = entity.Descripcion;
                ofer.FechaFin = entity.FechaFin;
                ofer.FechaInicio = entity.FechaInicio;
            }else
            {
                return false;
            }
            return true;
        }

        public IQueryable<Oferta> SearchFor(Expression<Func<Oferta, bool>> predicate)
        {
            var collection = _ofertas.AsQueryable();

            return collection.Where(predicate);
        }

        public IQueryable<Oferta> GetAll()
        {
            return _ofertas.AsQueryable();
        }

        public Oferta GetById(Guid id)
        {
            return _ofertas.Single(o => o.IdOferta == id);
        }

        #endregion
    }
}
